package com.cskaoyan.model;


import com.cskaoyan.util.FileUtils;

import java.io.*;

/**
 * 模拟学生数据源
 *
 * @since 14:09
 * @author wuguidong@com.com.cskaoyan.onaliyun.com
 */
public class StudentData {
    public static Student[] STUDS = new Student[20];
    public static final String[] COLUMNS;

    static {
        // 初始化
        init();
        // 表格列数据
        COLUMNS = new String[]{"学号", "姓名", "性别", "学校", "专业", "年龄", "城市", "手机号", "电子邮箱"};
    }

    // 提供给view层刷新表格时,重新读取文件使用,勿动!
    public static void refreshFileData() {
        init();
    }

    /**
     * 使用反序列流将students.txt文件中的Student数组对象读取出来
     * 然后将该数组中的Student对象赋值给数据源数组STUDS
     *
     * @author wuguidong@cskaoyan.onaliyun.com
     * @since 11:08
     */
    private static void init() {
        ObjectInputStream in = null;
        File studentsFile = FileUtils.studentsFile;
        try {
            // 判断文件的大小,如果不是一个空文件,那就read
            if (studentsFile.length() != 0) {
                // 创建反序列化流对象
                in = new ObjectInputStream(new FileInputStream(studentsFile));
                // 反序列化读取到Student对象数组
                Student[] students = (Student[]) in.readObject();
                // 为了避免文件中存储的Student对象个数超过数据源数组,所以要做判断处理
                if (students.length < STUDS.length) {
                    // 遍历students数组,给STUDS中的元素赋值赋值
                    for (int i = 0; i < students.length; i++) {
                        STUDS[i] = students[i];
                    }
                } else {
                    // 文件中存储的Student对象个数,已经超过了数据源数组的大小
                    STUDS = students;
                }
            }
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
